iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0
Mobile Development

Android Studio 學習交流系列 第 14

[Day14]Android學習-元件介紹-Activity

  • 分享至 

  • xImage
  •  

哈囉!你們好嗎?請問大家有沒有一個經驗,在使用app時,app只有一個畫面,而不能切換其他畫面?我想應該是沒有(除了比較簡單的架構),那麼切換畫面的動作在app裡應該如何實現呢?畫面是什麼?而且又是什麼影響切換動作?這篇文章向大家分享上面幾個問題的相關回答。

Activity

首先先討論畫面是什麼,畫面可以提供使用者和開發者開發的應用程式進行互動,這個所謂的畫面在Android裡是由名為Activity的元件所提供。Activity我比擬為相當於演唱會或音樂會大型表演的操控舞台前布幕的幕後工作人員,所以工作人員必須負責控制一開始舞台的呈現,中間的轉場,到結束都必須需要他,既然Activity是提供使用者畫面的重要元件,那麼Activity的活動流程一定很重要,這裡活動流程稱為Activity的生命週期,這邊討論一下Activity的生命週期,生命週期決定開發者應該讓元件這何時需要啟動、元件在何時需要停止與釋放,所以生命週期的認識很重要!要認真閱讀喔!Are you ready?我們開始生命週期吧!生命週期可分為:

onCreate:
這是剛開始Activity被呼叫的狀態。元件與資料要初始化、彼此連結。

onStart:
畫面尚未顯示,準備要呈現畫面的狀態呼叫。

onResume:
準備與使用者開始互動前呼叫。此時Activity在所有Activity元件中最上層能提供使用者此Activity的螢幕操控權以便使用者與Activity互動,例如:輸入、點擊。

onPause:
暫停Activity與使用者互動,使用者準備進入其他Activity時執行此方法。

onStop:
當看不到此Activity元件將呼叫此方法。

onDestroy:
停止Activity後,接者要準備銷毀資料,釋放資源,呼叫此方法後,即刻執行。

onRestart
onStop方法執行後,若沒有使用onDestroy方法銷毀資料,則可以恢復先前使用者操作的資訊繼續執行。

放一張經典的Activity生命週期圖

圖片截取來源
https://ithelp.ithome.com.tw/upload/images/20190926/20121149Telau31aXX.jpg

大致上可以看到生命週期由onCreate、onStart、onResume、onPause、onStop、onDestroy看到這裡有點感慨,人的生命週期好像也是生、老、病、死,不過,Activity還有onRestart重新開始真好!ㄟ~如果,將生命週期與人類一天的作息就更貼切了。

人類模擬Activity元件生命週期

文章以小明為第三人稱視角編寫

全新的一天開始了,小明從早上作夢還沒醒來(onCreate)腦袋瓜正在與過往的記憶重新擬合,要準備上學去時,媽媽還沒有看到小明,但是有聽到小明正在整理書包和換衣服的聲音(onStart),當小明從房間走出來看到媽媽時,然後可以向媽媽說聲早安(onResume)或做任何互動,接者吃完早餐就上學去,下課時,同學雖然有看到小明呆坐在教室,但是小明不想說話或和任何人做互動(onPause),下一堂課上課,老師要同學們抽背課文,老師看中小明,結果小明非常幸運的有機會展現他的記憶力,從下課(onPause)到背誦課文(onResume),好不容易熬過今天終於放學了,回家路上竟然踩到狗便便,之後,拖著疲憊的身軀,回到家洗澡吃飯後衝進房間準備上床睡覺(onPause),躺在床上後準備入眠(onStop)時,媽媽大聲問小明功課寫完了嗎,小明張開眼睛(onRestart),拖著疲憊的身軀走到門前(onStart),開門後,回應媽媽的問題(onResume),接著,終於可以回到房間準備休息了(onPause),閉上眼睛準備入眠(onStop),此時心理想著要忘記今天踩到狗便便的事,很開心的是小明沒有失眠,順利進入夢鄉,並且忘記今天所發生的一切事情(onDestroy)準備迎接全新的一天。

若文章有誤,歡迎分享

有更好的Activity生命週期解釋也在下方留言
/images/emoticon/emoticon33.gif
Thank you for your time!


上一篇
[Day13]Android學習-我的清單好朋友與baseAdapter類別
下一篇
[Day15]Android學習-類別介紹-Intent
系列文
Android Studio 學習交流30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言